package com.lineage.data.item_etcitem.doll;

import com.lineage.config.ConfigOther;
import com.lineage.data.executor.ItemExecutor;
import com.lineage.server.datatables.DollPowerTable;
import com.lineage.server.datatables.ItemTable;
import com.lineage.server.datatables.NpcTable;
import com.lineage.server.model.Instance.L1DollInstance;
import com.lineage.server.model.Instance.L1ItemInstance;
import com.lineage.server.model.Instance.L1PcInstance;
import com.lineage.server.model.L1War;
import com.lineage.server.serverpackets.S_ServerMessage;
import com.lineage.server.serverpackets.S_SystemMessage;
import com.lineage.server.serverpackets.ServerBasePacket;
import com.lineage.server.templates.L1Doll;
import com.lineage.server.templates.L1Item;
import com.lineage.server.templates.L1Npc;
import com.lineage.server.timecontroller.server.ServerWarExecutor;
import com.lineage.server.world.WorldItem;
import com.lineage.server.world.WorldWar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

public class Magic_Doll_Power extends ItemExecutor {
	private Map<Integer, L1DollInstance> _dolls2 = new HashMap<>();

	private Map<Integer, L1DollInstance> _dolls3 = new HashMap<>();

	public static ItemExecutor get() {
		return new Magic_Doll_Power();
	}

	public void execute(int[] data, L1PcInstance pc, L1ItemInstance item) {
		int itemId = item.getItemId();
		int itemobj = item.getId();
		useMagicDoll(pc, itemId, itemobj);
	}

	private void useMagicDoll(L1PcInstance pc, int itemId, int itemObjectId) {
		L1Doll type = DollPowerTable.get().get_type(itemId);
		if (pc.getDoll(itemObjectId) != null) {
			pc.getDoll(itemObjectId).deleteDoll();
			return;
		}
		if (pc.isInvisble())
			return;
		int castle_id = 1;
		while (castle_id < 8) {
			if (!ConfigOther.WAR_DOLL && ServerWarExecutor.get().isNowWar(castle_id) && pc.getMapId() == 4) {
				pc.sendPackets((ServerBasePacket) new S_ServerMessage("攻城战期间无法使用娃娃!!"));
				return;
			}
			castle_id++;
		}
		if (!pc.getDolls().isEmpty()) {
			Iterator<L1DollInstance> iter = pc.getDolls().values().iterator();
			while (iter.hasNext()) {
				L1DollInstance doll = iter.next();
				L1Doll type2 = DollPowerTable.get()
						.get_type(pc.getInventory().getItem(doll.getItemObjId()).getItemId());
				if (type2 != null) {
					if (type2.get_mode() == 0)
						this._dolls2.put(Integer.valueOf(doll.getItemObjId()), doll);
					if (type2.get_mode() != 1)
						continue;
					this._dolls3.put(Integer.valueOf(doll.getItemObjId()), doll);
				}
			}
		}
		if (this._dolls2.size() >= ConfigOther.dollcount && type.get_mode() == 0) {
			pc.sendPackets((ServerBasePacket) new S_SystemMessage("已携带:" + this._dolls2.size() + "只魔法娃娃，不能带更多了"));
			this._dolls2.clear();
			this._dolls3.clear();
			return;
		}
		if (this._dolls3.size() >= ConfigOther.dollcount1 && type.get_mode() == 1) {
			pc.sendPackets((ServerBasePacket) new S_SystemMessage("已携带:" + this._dolls3.size() + "只补助娃娃，不能带更多了"));
			this._dolls2.clear();
			this._dolls3.clear();
			return;
		}
		if (!pc.getDolls().isEmpty()) {
			Iterator<L1DollInstance> iter = pc.getDolls().values().iterator();
			while (iter.hasNext()) {
				L1DollInstance doll = iter.next();
				if (pc.getInventory().getItem(doll.getItemObjId()).getItemId() == itemId) {
					pc.sendPackets((ServerBasePacket) new S_ServerMessage("\\fY不能携带相同的娃娃"));
					return;
				}
			}
		}
		if (!ConfigOther.WAR_DOLL && pc.getClan() != null) {
			boolean inWar = false;
			if (pc.getClan().getCastleId() != 0) {
				if (ServerWarExecutor.get().isNowWar(pc.getClan().getCastleId()))
					inWar = true;
			} else {
				List<L1War> warList = WorldWar.get().getWarList();
				Iterator<L1War> iter2 = warList.iterator();
				while (iter2.hasNext()) {
					L1War war = iter2.next();
					if (war.checkClanInWar(pc.getClan().getClanName())) {
						inWar = true;
						break;
					}
				}
			}
			if (inWar) {
				pc.sendPackets((ServerBasePacket) new S_ServerMessage(1531));
				return;
			}
		}
		boolean iserror = false;
		if (type != null) {
			if (type.get_need() != null) {
				int[] itemids = type.get_need();
				int[] counts = type.get_counts();
				int i = 0;
				while (i < itemids.length) {
					if (!pc.getInventory().checkItem(itemids[i], counts[i])) {
						L1Item temp = ItemTable.get().getTemplate(itemids[i]);
						pc.sendPackets((ServerBasePacket) new S_ServerMessage(337, temp.getNameId()));
						iserror = true;
					}
					i++;
				}
				if (!iserror) {
					i = 0;
					while (i < itemids.length) {
						pc.getInventory().consumeItem(itemids[i], counts[i]);
						i++;
					}
				}
			}
			if (!iserror) {
				L1Npc template = NpcTable.get().getTemplate(71082);
				L1DollInstance doll2 = new L1DollInstance(template, pc, itemObjectId, type, true);
				L1ItemInstance item = WorldItem.get().getItem(Integer.valueOf(itemObjectId));
				item.startEquipmentTimer(pc);
			}
		}
	}
}
